﻿#ifndef SINGLETON_H
#define SINGLETON_H

#include <QScopedPointer>
#include <QMutex>

//这个宏定义提供了一种标准化的方式来声明 Qt 单例类，
//确保线程安全、防止拷贝、自动内存管理，是 Qt 项目中常用的单例实现模式。
#define SINGLETON_DECL(Class) \
public: \
    static Class *Instance(); \
    private: \
    Q_DISABLE_COPY(Class) \
    static QScopedPointer<Class> self;

//这个宏定义提供了单例模式的完整线程安全实现，
//通过双重检查锁定模式确保性能和正确性，是 Qt 项目中常用的单例实现方式。
#define SINGLETON_IMPL(Class) \
QScopedPointer<Class> Class::self; \
    Class *Class::Instance() { \
        if (self.isNull()) { \
            static QMutex mutex; \
            QMutexLocker locker(&mutex); \
            if (self.isNull()) { \
                self.reset(new Class); \
        } \
    } \
        return self.data(); \
}

#endif // SINGLETON_H
